<?php
// +----------------------------------------------------------------------
// | sfadmin - Suifeng Administration
// +----------------------------------------------------------------------
// | Copyright (c) 2017-2020 http://suifeng.tech All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: suifeng <1787585212@qq.com>
// +----------------------------------------------------------------------

namespace suifeng\mvc\admin;

class AdminHelper
{
    /**
     * 检查用户是否有登录。
     *
     * @return boolean
     */
    public static function checkLogin()
    {
        // 检查action有没有定义@Anonymous。
        $ref_method = new \ReflectionAnnotatedMethod($this, request()->action());
        if ($ref_method->hasAnnotation('Anonymous')) {
            $value = $ref_method->getAnnotation('Anonymous')->value;
            $value = is_null($value) ? true : boolval($value);
            if ($value === true) {
                return null;
            }
        }

        // 检查controller有没有定义@Anonymous。
        $ref_class = new \ReflectionAnnotatedClass($this);
        if ($ref_class->hasAnnotation('Anonymous')) {
            $title = $ref_class->getAnnotation('Anonymous')->value;
            $value = $ref_class->getAnnotation('Anonymous')->value;
            $value = is_null($value) ? true : boolval($value);
            if ($value === true) {
                return null;
            }
        }

        // 没有@Anonymous，或@@Anonymous(false)，就要检查登录。
        $uid = is_login();
        if ($uid) {
            return $uid;
        } else {
            if (request()->isAjax()) {
                $this->error('请先登录系统', url(config('admin_login_url'), '', true, true), array('login' => 1));
            } else {
                redirect(url(config('admin_login_url'), '', true, true));
            }
        }

        return true;
    }



    protected function _check_user_roles()
    {
        // 检查action有没有定义@HasRoles注解。
        $ref_method = new \ReflectionAnnotatedMethod($this, request()->action());
        if ($ref_method->hasAnnotation('Anonymous')) {
            $value = $ref_method->getAnnotation('Anonymous')->value;
            $value = is_null($value) ? true : boolval($value);
            if ($value === true) {
                return null;
            }
        }
    }
}